package main

import "fmt"
import "sort"
import "math/rand"

// 1. 声明Hero结构体
type Hero struct {
	Name string
	Age int
}

// 2. 声明Hero结构体切片类型
type HeroSlice []Hero

// 3. 实现Interface接口
func (hs HeroSlice) Len() int {
	return len(hs)
}

// Less方法决定你使用什么标准进行排序
// 1. 按年龄从小到大排序
func (hs HeroSlice) Less(i, j int) bool {
	return hs[i].Age < hs[j].Age
}

// Swap
func (hs HeroSlice) Swap(i, j int) {
	temp := hs[i]
	hs[i] = hs[j]
	hs[j] = temp
}

func main() {

	// 先定义数组
	var intSlice = []int{0, -1, 10, 7, 90}
	// 要求对 intSlice进行排序
	sort.Ints(intSlice)
	fmt.Println(intSlice)

	// 请对结构体切片进行排序，使用系统提供的方法
	var heroes HeroSlice
	for i := 0; i < 10; i++ {
		hero := Hero {
			Name : fmt.Sprintf("英雄%d", rand.Intn(100)),
			Age : rand.Intn(100), 
		}
		// 将hero append到heroes切片中
		heroes = append(heroes, hero)
	}

	// 看看排序前的顺序
	for _, v := range heroes {
		fmt.Println(v)
	}

	// 调用sort.Sort
	sort.Sort(heroes)
	fmt.Println("---------------------------")
	for _, v := range heroes {
		fmt.Println(v)
	}

}